home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-11-21 | 8.6 KB | 467 lines | [TEXT/MACH] |
- \ mini task to display system queues
- \ © 1988 J. Langowski / MacTutor
-
- only forth also assembler also mac
-
- $160 constant vblqhdr
- $356 constant vcbqhdr
- $308 constant drvqhdr
- $14a constant evtqhdr
- $360 constant fsqhdr
- $d92 constant dtqhdr
- $b30 constant timevars
- $11c constant utablebase
-
- 72 user taskwindowpointer
- 92 user (type)
- 108 user taskmenubar
- 144 user uservector
- 148 user userdata
- 152 user content-hook
- 164 user goaway-hook
- 168 user update-hook
- 172 user activate-hook
-
- 2 CONSTANT Message
- 10 CONSTANT Where
- 14 CONSTANT Modifiers
- 1 CONSTANT ActivateMask
-
- 300 constant appleid
- 301 constant fileid
- 302 constant editid
-
- 152 CONSTANT WrefCon
-
- create rect1 20 w, 20 w, 90 w, 28 w,
- create rect2 20 w, 35 w, 90 w, 43 w,
- create rect3 20 w, 50 w, 90 w, 58 w,
- create rect4 20 w, 65 w, 90 w, 73 w,
- create rect5 20 w, 80 w, 90 w, 88 w,
- create rect6 20 w, 95 w, 90 w, 103 w,
- create rect7 20 w, 110 w, 90 w, 118 w,
-
- CREATE APPLESTRING 01 C, $14 C,
-
- NEW.MBAR queueBar
-
- NEW.MENU AppleMenu
- APPLESTRING AppleMenu TITLE
- 0 APPLEID AppleMenu BOUNDS
- " About Queues ...;(-" AppleMenu ITEMS
-
- NEW.MENU FileMenu
- " File" FileMenu TITLE
- 0 FileID FileMenu BOUNDS
- " Quit" FileMenu ITEMS
-
- NEW.MENU EditMenu
- " Edit" EditMenu TITLE
- 0 EDITID EditMenu BOUNDS
- " (Undo/Z;(-;(Cut/K;(Copy/C;(Paste/V;(Clear" EditMenu ITEMS
-
- NEW.MENU vblmenu
- " vbl" vblmenu TITLE
- -1 150 vblmenu BOUNDS
- " VBL Tasks;(-" vblmenu ITEMS
-
- NEW.MENU vcbmenu
- " vcb" vcbmenu TITLE
- -1 151 vcbmenu BOUNDS
- " Vol contrl blks;(-" vcbmenu ITEMS
-
- NEW.MENU drvmenu
- " drv" drvmenu TITLE
- -1 152 drvmenu BOUNDS
- " Drives;(-" drvmenu ITEMS
-
- NEW.MENU evtmenu
- " evt" evtmenu TITLE
- -1 153 evtmenu BOUNDS
- " Events [???];(-" evtmenu ITEMS
-
- NEW.MENU fsmenu
- " fs" fsmenu TITLE
- -1 154 fsmenu BOUNDS
- " File System;(-" fsmenu ITEMS
-
- NEW.MENU dtmenu
- " dt" dtmenu TITLE
- -1 155 dtmenu BOUNDS
- " Def Tasks;(-" dtmenu ITEMS
-
- NEW.MENU tmmenu
- " tm" tmmenu TITLE
- -1 156 tmmenu BOUNDS
- " Time manager;(-" tmmenu ITEMS
-
- NEW.WINDOW SysQueue
- " System Queues" SysQueue TITLE
- 250 50 350 250 SysQueue BOUNDS
- Rounded Visible CloseBox GrowBox SysQueue ITEMS
-
- NEW.WINDOW qInfo
- " Queue Info" qInfo TITLE
- 50 50 250 500 qInfo BOUNDS
- NoGrow Invisible NoCloseBox NoGrowBox qInfo ITEMS
-
- 500 2000 terminal queues
-
- CODE unpack
- MOVE.L (A6),D0
- CLR.L D1
- MOVE.W D0,D1
- CLR.W D0
- SWAP.W D0
- MOVE.L D0,(A6)
- MOVE.L D1,-(A6)
- RTS
- END-CODE MACH
-
- : beep ( n )
- 0 do 1 call sysbeep loop
- ;
-
- : wait { #ticks | time -- }
- call tickcount #ticks + -> time
- begin pause
- call tickcount time >
- until
- ;
-
- : popup.select { menu pt | point -- menuID item# }
- pt -> point
- ^ point call localtoglobal
- menu @ point unpack 1
- call popupmenuselect
- unpack
- ;
-
- : do.content { | pt -- }
- CALL FrontWindow CALL SetPort
- qInfo call HideWindow
-
- RUN-CONTENT
- EVENT-RECORD Where + @ -> pt
- ^ pt CALL GlobalToLocal
-
- 0
- pt rect1 CALL PtInRect
- IF drop vblmenu THEN
- pt rect2 CALL PtInRect
- IF drop vcbmenu THEN
- pt rect3 CALL PtInRect
- IF drop drvmenu THEN
- pt rect4 CALL PtInRect
- IF drop evtmenu THEN
- pt rect5 CALL PtInRect
- IF drop fsmenu THEN
- pt rect6 CALL PtInRect
- IF drop dtmenu THEN
- pt rect7 CALL PtInRect
- IF drop tmmenu THEN
-
- ?dup IF ( rectangle was selected)
- pt popup.select
-
- IF ( popup selection was made )
- ( menuID ) userData task-> queues !
- THEN
- THEN
- ;
-
- : draw.rects
- rect1 call framerect
- rect2 call framerect
- rect3 call framerect
- rect4 call framerect
- rect5 call framerect
- rect6 call framerect
- rect7 call framerect
- ;
-
- : clr.rects
- rect1 call eraserect
- rect2 call eraserect
- rect3 call eraserect
- rect4 call eraserect
- rect5 call eraserect
- rect6 call eraserect
- rect7 call eraserect
- ;
-
- : blackBar { rect pixels | locBR locTL }
- rect ^ locTL 8 cmove
- ^ locBR w@ ( bottom ) pixels -
- ^ locTL w!
- ^ locTL call paintrect
- ;
-
- : #elems { qhdr | elems -- #.of.queue.elements }
- 0 -> elems
- 2 +> qhdr
- begin
- qhdr @ ?dup while
- -> qhdr
- 1 +> elems
- repeat
- elems
- ;
-
- : display.queues { | -- }
- clr.rects
- draw.rects
- rect1 vblqhdr #elems 4* blackBar
- rect2 vcbqhdr #elems 4* blackBar
- rect3 drvqhdr #elems 4* blackBar
- rect4 evtqhdr #elems 4* blackBar
- rect5 fsqhdr #elems 4* blackBar
- rect6 dtqhdr #elems 4* blackBar
- rect7 timevars @ 8 + #elems 4* blackBar
- ;
-
- : dsp.vbl { | qelemPtr n -- }
- cls
- qinfo " Vertical Blanking Tasks"
- call SetWTitle
- ." ————————————————————————————————" cr
- ." task# qtype ProcPtr Count Phase" cr
- ." ————————————————————————————————" cr
- vblqhdr 2+ -> qelemptr
- 1 -> n
- begin
- qelemptr @ ?dup while
- -> qelemptr
- n 3 .r 3 spaces
- hex
- qelemptr 4 + w@ 5 .r space
- qelemptr 6 + @ 8 .r space
- qelemptr 10 + w@ 5 .r space
- qelemptr 12 + w@ 5 .r cr
- decimal
- 1 +> n
- repeat
- ;
-
- : dsp.vcb { | qelemPtr n -- }
- cls
- qinfo " Volume Control Blocks"
- call SetWTitle
- ." —————————————————————————————————————————————————————————————————————————" cr
- ." vcb# qtype Volume name Drive dRef# vRef# #blks blksz free" cr
- ." —————————————————————————————————————————————————————————————————————————" cr
- vcbqhdr 2+ -> qelemptr
- 1 -> n
- begin
- qelemptr @ ?dup while
- -> qelemptr
- n 3 .r 3 spaces
- hex
- qelemptr 4 + w@ 5 .r space
- qelemptr 44 + count dup rot swap type
- 27 swap - spaces
- qelemptr 72 + w@ 5 .r space
- qelemptr 74 + w@ 5 .r space
- qelemptr 78 + w@ 5 .r space
- qelemptr 26 + w@ 5 .r space
- qelemptr 28 + @ 5 .r space
- qelemptr 42 + w@ 4 .r cr
- decimal
- 1 +> n
- repeat
- ;
-
- : dsp.drv { | qelemPtr n -- }
- cls
- qinfo " Drives"
- call SetWTitle
- ." —————————————————————————————————————————————" cr
- ." drv# qtype Drive dRef# FSID #blks l dd ss" cr
- ." —————————————————————————————————————————————" cr
- drvqhdr 2+ -> qelemptr
- 1 -> n
- begin
- qelemptr @ ?dup while
- -> qelemptr
- n 3 .r 3 spaces
- hex
- qelemptr 4 + w@ 5 .r space
- qelemptr 6 + w@ 5 .r space
- qelemptr 8 + w@ 5 .r space
- qelemptr 10 + w@ 4 .r space
- qelemptr 12 + w@
- qelemptr 4 + w@ 1 = IF
- qelemptr 14 + w@ 65536 * +
- THEN
- 8 .r space
- qelemptr 4- c@ $80 AND
- IF ascii y emit ELSE ascii n emit THEN space
- qelemptr 3- c@ 2 .r 2 spaces
- qelemptr 1- c@ $80 AND
- IF ascii n emit ELSE ascii y emit THEN cr
- decimal
- 1 +> n
- repeat
- ;
-
- : dsp.evt { | qelemPtr n -- }
- cls
- qinfo " Queued Events"
- call SetWTitle
- ." ————————————————————————————————————————————————" cr
- ." drv# qtype What Message When Where Mods" cr
- ." ————————————————————————————————————————————————" cr
- evtqhdr 2+ -> qelemptr
- 1 -> n
- begin
- qelemptr @ ?dup while
- -> qelemptr
- n 3 .r 3 spaces
- hex
- qelemptr 4 + w@ 5 .r space
- qelemptr 6 + w@ 5 .r space
- qelemptr 8 + @ 8 .r space
- qelemptr 12 + @ 8 .r space
- qelemptr 16 + @ 8 .r space
- qelemptr 20 + w@ 4 .r cr
- decimal
- 1 +> n
- repeat
- ;
-
- : dsp.fs
- cls
- qinfo " File System Requests"
- call SetWTitle
- ;
-
- : dsp.dt
- cls
- qinfo " Deferred Tasks"
- call SetWTitle
- ;
-
- : dsp.tm { | qelemPtr n -- }
- cls
- qinfo " Time manager"
- call SetWTitle
- ." ——————————————————————————" cr
- ." task# qtype ProcPtr Count" cr
- ." ——————————————————————————" cr
- timeVars @ 10 + -> qelemptr
- 1 -> n
- begin
- qelemptr @ ?dup while
- -> qelemptr
- n 3 .r 3 spaces
- hex
- qelemptr 4 + w@ 5 .r space
- qelemptr 6 + @ 8 .r space
- qelemptr 10 + w@ 5 .r cr
- decimal
- 1 +> n
- repeat
- ;
-
- : do.user
- qInfo dup call showwindow call selectwindow
- qInfo taskwindowpointer !
- ( menuID ) CASE
- 150 OF dsp.vbl ENDOF
- 151 OF dsp.vcb ENDOF
- 152 OF dsp.drv ENDOF
- 153 OF dsp.evt ENDOF
- 154 OF dsp.fs ENDOF
- 155 OF dsp.dt ENDOF
- 156 OF dsp.tm ENDOF
- ENDCASE
- SysQueue taskwindowpointer !
- ;
-
- : do.update { | pt -- }
- sysQueue call setport
- draw.rects
- run-update
- ;
-
- : do.activate
- event-record modifiers + w@
- 1 AND \ Activate event?
- IF
- call DrawMenuBar
- ELSE
- THEN
- ;
-
- : do.close
- bye
- ;
-
- : INIT-MBAR
- queueBar ADD
- queueBar APPLEMENU ADD
- APPLEMENU @ ascii DRVR CALL ADDRESMENU
- queueBar FileMenu ADD
- queueBar EditMenu ADD
- queueBar vblmenu add
- queueBar vcbmenu add
- queueBar drvmenu add
- queueBar evtmenu add
- queueBar fsmenu add
- queueBar dtmenu add
- queueBar tmmenu add
- ;
-
- : DO-APPLE { item# | [ 32 lallot ] daName -- }
- item# 1 =
- IF 3 beep
-
- ELSE AppleMenu @
- item# ^ DAName CALL GetItem
- ^ DAName CALL OpenDeskAcc DROP
- THEN
- ;
-
- : do-file
- drop bye
- ;
-
- : MBAR-HANDLER ( item# menuID - )
- CASE
- APPLEID OF DO-APPLE ENDOF
- FILEID OF DO-FILE ENDOF
- drop
- ENDCASE
- 0 CALL HILITEMENU
- ;
-
- : go.queue { | mb -- }
- activate
-
- ['] do.content content-hook !
- ['] do.update update-hook !
- ['] mbar-handler menu-vector !
- ['] do.activate activate-hook !
- ['] do.close goaway-hook !
- ['] do.user uservector !
-
- begin
- pause
- sysQueue call setport
- display.queues
- 60 wait
- again
- ;
-
- : start
- SysQueue add
- QInfo add
- SysQueue queues build
- SysQueue WRefCon + @
- QInfo WRefCon + !
- SysQueue dup call selectwindow call setport
- init-mbar
- queueBar queues mbar>task
- queues go.queue
- ;
-